home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / glibmm-2.4 / proc / m4 / base.m4 next >
M4 Source File  |  2006-04-20  |  11KB  |  392 lines

  1. dnl $Id: base.m4,v 1.2 2003/03/14 22:46:08 murrayc Exp $
  2. divert(-1)
  3.  
  4. dnl
  5. dnl The general convention is 
  6. dnl   _* are macros
  7. dnl   __*__ are variables 
  8.  
  9. dnl
  10. dnl  rename several m4 builtins to avoid name clashes
  11. dnl
  12.  
  13. define(`_PREFIX_BUILTIN_ALIAS', `define(`m4_$1', defn(`$1'))')
  14. define(`_PREFIX_BUILTIN', `_PREFIX_BUILTIN_ALIAS(`$1')`'undefine(`$1')')
  15.  
  16. _PREFIX_BUILTIN(`builtin')
  17. _PREFIX_BUILTIN(`decr')
  18. _PREFIX_BUILTIN(`errprint')
  19. _PREFIX_BUILTIN(`esyscmd')
  20. _PREFIX_BUILTIN(`eval')
  21. _PREFIX_BUILTIN(`format')
  22. _PREFIX_BUILTIN(`incr')
  23. _PREFIX_BUILTIN(`index')
  24. _PREFIX_BUILTIN(`indir')
  25. _PREFIX_BUILTIN(`len')
  26. _PREFIX_BUILTIN(`maketemp')
  27. _PREFIX_BUILTIN(`syscmd')
  28. _PREFIX_BUILTIN(`substr')
  29. _PREFIX_BUILTIN(`sysval')
  30.  
  31. dnl
  32. dnl  More alternative names for m4 macros, not undefined (yet!).
  33. dnl
  34.  
  35. _PREFIX_BUILTIN_ALIAS(`changecom')
  36. _PREFIX_BUILTIN_ALIAS(`changequote')
  37. _PREFIX_BUILTIN_ALIAS(`define')
  38. _PREFIX_BUILTIN_ALIAS(`divert')
  39. _PREFIX_BUILTIN_ALIAS(`divnum')
  40. _PREFIX_BUILTIN_ALIAS(`ifdef')
  41. _PREFIX_BUILTIN_ALIAS(`ifelse')
  42. _PREFIX_BUILTIN_ALIAS(`include')
  43. _PREFIX_BUILTIN_ALIAS(`m4exit')
  44. _PREFIX_BUILTIN_ALIAS(`m4wrap')
  45. _PREFIX_BUILTIN_ALIAS(`patsubst')
  46. _PREFIX_BUILTIN_ALIAS(`popdef')
  47. _PREFIX_BUILTIN_ALIAS(`pushdef')
  48. _PREFIX_BUILTIN_ALIAS(`shift')
  49. _PREFIX_BUILTIN_ALIAS(`undefine')
  50. _PREFIX_BUILTIN_ALIAS(`undivert')
  51. _PREFIX_BUILTIN_ALIAS(`regexp')
  52. _PREFIX_BUILTIN_ALIAS(`translit')
  53.  
  54. dnl
  55. dnl  Type Conversion Macros
  56. dnl
  57.  
  58. m4_include(convert.m4)
  59.  
  60. dnl
  61. dnl ----------------------- Utility Macros -------------------------
  62. dnl 
  63.  
  64. dnl
  65. dnl Add a comma before the arg if any, do nothing otherwise
  66. dnl _COMMA_PREFIX(a) -> ,a
  67. dnl _COMMA_PREFIX() -> `'
  68. dnl
  69. define(`_COMMA_PREFIX', `m4_ifelse(m4_eval(m4_len(`$*') >= 1), 1, `,$*')')dnl
  70.  
  71. dnl
  72. dnl Add a comma after the arg if any, do nothing otherwise
  73. dnl _COMMA_SUFFIX(a) -> a,
  74. dnl _COMMA_SUFFIX() -> `'
  75. dnl
  76. define(`_COMMA_SUFFIX', `m4_ifelse(m4_eval(m4_len(`$*') >= 1), 1, `$*,')')dnl
  77.  
  78.  
  79. dnl
  80. dnl  _UPPER(string)
  81. dnl    uppercase a string
  82. define(`_UPPER',`m4_translit(`$*',`abcdefghijklmnopqrstuvwxyz',`ABCDEFGHIJKLMNOPQRSTUVWXYZ')')
  83.  
  84. dnl
  85. dnl  _LOWER(string)
  86. dnl    lower a string
  87. define(`_LOWER',`m4_translit(`$*',`ABCDEFGHIJKLMNOPQRSTUVWXYZ',`abcdefghijklmnopqrstuvwxyz')')
  88.  
  89. dnl 
  90. dnl  _QUOTE(macro)  
  91. dnl    If a macro generates an output with commas we need to protect it
  92. dnl    from being broken down and interpreted
  93. define(`_QUOTE',``$*'')
  94.  
  95. dnl
  96. dnl  _NUM(arglist)   
  97. dnl    count number of arguments
  98. define(`_NUM',`m4_ifelse(m4_len(`$*'),0,0,`$#')')
  99.  
  100. dnl
  101. dnl For handling of included macro files.
  102. dnl
  103.  
  104. dnl _PUSH(section_name)
  105. dnl Uses pushdef() to redefine the __DIV__ macro
  106. dnl so that it diverts ouput to the section_name,
  107. dnl or discards it (-1) if no section_name is given.
  108. dnl TODO: However, as far as I can tell, __DIV__ is not used anywhere. murrayc.
  109. define(`_PUSH',`pushdef(`__DIV__',divnum)m4_divert(m4_ifelse($1,,-1,__SEC_$1))dnl`'')
  110.  
  111. dnl _POP(section_name)
  112. dnl Uses popdef() to go back to the previous definition of the __DIV__ macro.
  113. define(`_POP',`m4_divert(__DIV__)popdef(`__DIV__')dnl`'')
  114.  
  115. dnl _SECTION(section_name):
  116. dnl m4_divert() sends subsequent output to the specified file:
  117. define(`_SECTION',`m4_divert(__SEC_$1)dnl')
  118.  
  119. dnl _IMPORT(section_name):
  120. define(`_IMPORT',`m4_undivert(__SEC_$1)dnl')
  121.  
  122. dnl _GET_TYPE_FUNC(GtkWidget) -> gtk_widget_get_type()
  123. dnl The funny `[A-Z]?' part of the regexp is to catch things like GdkGCFooBar.
  124. define(`_GET_TYPE_FUNC',`dnl
  125. m4_translit(m4_substr(m4_patsubst(`$1',`[A-Z]?[A-Z]',`_\&'),1),`[A-Z]',`[a-z]')_get_type()`'dnl
  126. ')
  127.  
  128. dnl Define a new diversion
  129. dnl In m4, m4_divert() selects the output file to be used for subsequent text output.
  130. dnl 0 is the normal output. We define extra output files with _NEW_SECTION().
  131. dnl This macro seems to redefine __SEC_COUNT as __SEC_COUNT+1, and also
  132. dnl define __SEC_<the macro argument> as __SEC_COUNT.
  133. dnl So it just sets that section identifier to the next number.
  134.  
  135. define(`__SEC_COUNT__',0)
  136.  
  137. define(`_NEW_SECTION',`dnl
  138. define(`__SEC_COUNT__',m4_eval(__SEC_COUNT__+1))dnl
  139. define(`__SEC_$1',__SEC_COUNT__)dnl
  140. ')
  141.  
  142.  
  143. changequote([,])
  144. define([__BT__],[changequote(,)`changequote(`,')])
  145. define([__FT__],[changequote(,)'changequote(`,')])
  146. changequote(`,')
  147.  
  148. changecom()
  149.  
  150. dnl
  151. dnl ----------------------- Main Headers -------------------------
  152. dnl
  153.  
  154. _NEW_SECTION(SECTION_HEADER1)     dnl  header up to the first namespace
  155. _NEW_SECTION(SECTION_HEADER2)     dnl  header after the first namespace
  156. _NEW_SECTION(SECTION_HEADER3)     dnl  header after the first namespace
  157. _NEW_SECTION(SECTION_PHEADER)     dnl  private header
  158. _NEW_SECTION(SECTION_CC_INCLUDES) dnl  section for additional includes
  159. _NEW_SECTION(SECTION_SRC_CUSTOM)        dnl  user supplied implementation
  160. _NEW_SECTION(SECTION_ANONYMOUS_NAMESPACE)  dnl  built implementation in anonymous namespace
  161. _NEW_SECTION(SECTION_SRC_GENERATED)        dnl  built implementation
  162. _NEW_SECTION(SECTION_CLASS1)      dnl  decl to _CLASS
  163. _NEW_SECTION(SECTION_CLASS2)      dnl  _CLASS to end of class
  164. _NEW_SECTION(SECTION_CC)   dnl  section for methods (in current namespace)
  165.  
  166. _NEW_SECTION(SECTION_CC_IMPLEMENTS_INTERFACES)   dnl Calls SomeBaseInterface::add_interface(get_type()).
  167.  
  168. dnl Virtual Functions and Default Signal Handlers (Very similar)
  169. _NEW_SECTION(SECTION_H_VFUNCS)      dnl Declaration of vfunc hooks.
  170. _NEW_SECTION(SECTION_H_VFUNCS_CPPWRAPPER) dnl Convenience method, using C++ types, that just calls the vfunc.
  171. _NEW_SECTION(SECTION_H_DEFAULT_SIGNAL_HANDLERS)      dnl Declaration of default signal handler' hooks.
  172.  
  173. _NEW_SECTION(SECTION_CC_DEFAULT_SIGNAL_HANDLERS)
  174. _NEW_SECTION(SECTION_CC_VFUNCS)
  175. _NEW_SECTION(SECTION_CC_VFUNCS_CPPWRAPPER) dnl Convenience method, using C++ types, that just calls the vfunc.
  176.  
  177. _NEW_SECTION(SECTION_PH_DEFAULT_SIGNAL_HANDLERS) dnl  private class declaration
  178. _NEW_SECTION(SECTION_PH_VFUNCS) dnl  private class declaration
  179.  
  180. _NEW_SECTION(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS) dnl  private class implementation
  181. _NEW_SECTION(SECTION_PCC_VFUNCS) dnl  private class implementation
  182.  
  183. _NEW_SECTION(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS)  dnl  gtk+ class_init function
  184. _NEW_SECTION(SECTION_PCC_CLASS_INIT_VFUNCS)  dnl  gtk+ class_init function
  185.  
  186.  
  187. dnl Signal Proxies:
  188. dnl _NEW_SECTION(SECTION_H_SIGNALPROXIES) dnl signal member objects
  189. _NEW_SECTION(SECTION_CC_SIGNALPROXIES) dnl signal member objects
  190.  
  191. dnl Property Proxies:
  192. dnl _NEW_SECTION(SECTION_H_PROPERTYPROXIES) 
  193. _NEW_SECTION(SECTION_CC_PROPERTYPROXIES)
  194.  
  195. _NEW_SECTION(SECTION_CC_INITIALIZE_CLASS_EXTRA) dnl For instance, to initialize special member data from all constructors. Not commonly used.
  196.  
  197. dnl _NEW_SECTION(PROXY)
  198. dnl _NEW_SECTION(SECTION_PCC_OBJECT_INIT) dnl  gtk+ object_init function
  199.  
  200.  
  201. _NEW_SECTION(SECTION_CHECK)
  202. _NEW_SECTION(SECTION_USR)
  203.  
  204. define(`_CHECK',`dnl
  205. _PUSH(SECTION_CHECK)
  206.     $*
  207. _POP()
  208. ')
  209.  
  210. dnl Start of processing
  211. dnl
  212. dnl _START(filname, module,modulecanonical) .e.g _START(button, gtkmm, gtkmm)
  213. define(`_START',`dnl
  214. define(`__MODULE__',$2)dnl
  215. define(`__MODULE_CANONICAL__',$3)dnl
  216. define(`__HEADER_GUARD__',`_`'_UPPER(m4_translit(`$3`'_`'$1', `-', `_'))')dnl
  217. define(`__FILE__',$1)dnl
  218. _SECTION(SECTION_HEADER1)
  219. ')
  220.  
  221.  
  222. dnl This does all the work of assembling the final output
  223. dnl
  224. dnl _END()
  225. dnl
  226. define(`_END',`dnl
  227. m4_divert(0)dnl
  228. #S 0 dnl Marks the beginning of the header file.
  229.  
  230. // -*- c++ -*-
  231. // Generated by gtkmmproc -- DO NOT MODIFY!
  232. #ifndef __HEADER_GUARD__`'_H
  233. #define __HEADER_GUARD__`'_H
  234.  
  235. m4_ifelse(__MODULE__,glibmm,,`dnl else
  236. #include <glibmm.h>
  237. ')dnl
  238. _IMPORT(SECTION_HEADER1)
  239. _IMPORT(SECTION_HEADER2)
  240. _IMPORT(SECTION_HEADER3)
  241. #endif /* __HEADER_GUARD__`'_H */
  242.  
  243. #S 1 dnl Marks the beginning of the private header file.
  244.  
  245. // -*- c++ -*-
  246. // Generated by gtkmmproc -- DO NOT MODIFY!
  247. #ifndef __HEADER_GUARD__`'_P_H
  248. #define __HEADER_GUARD__`'_P_H
  249. _IMPORT(SECTION_PHEADER)
  250. #endif /* __HEADER_GUARD__`'_P_H */
  251.  
  252. #S 2 dnl Marks the beginning of the source file.
  253.  
  254. // Generated by gtkmmproc -- DO NOT MODIFY!
  255.  
  256. #include <__MODULE__/__FILE__.h>
  257. #include <__MODULE__/private/__FILE__`'_p.h>
  258.  
  259. _IMPORT(SECTION_CC_INCLUDES)
  260. _IMPORT(SECTION_SRC_CUSTOM)
  261.  
  262.  
  263. namespace
  264. {
  265. _IMPORT(SECTION_ANONYMOUS_NAMESPACE)
  266. } // anonymous namespace
  267.  
  268. _IMPORT(SECTION_SRC_GENERATED)
  269.  
  270. m4_divert(-1)
  271. m4_undivert()
  272. ')
  273.  
  274. define(`_NAMESPACE',`dnl
  275. _PUSH()
  276. m4_ifdef(`__NAMESPACE__',`dnl
  277. pushdef(`__NAMESPACE__',__NAMESPACE__`::'$1)
  278. pushdef(`__NAMESPACE_BEGIN__',__NAMESPACE_BEGIN__`
  279.  
  280. namespace '$1`
  281. {')
  282. pushdef(`__NAMESPACE_END__',`} // namespace '$1`
  283.  
  284. '__NAMESPACE_END__)
  285. ',`dnl else
  286. pushdef(`__NAMESPACE__',$1)
  287. pushdef(`__NAMESPACE_BEGIN__',`namespace '$1`
  288. {')
  289. pushdef(`__NAMESPACE_END__',`} // namespace '$1)
  290. ')dnl endif __NAMESPACE__
  291. _POP()
  292. ')dnl enddef _NAMESPACE
  293.  
  294. define(`_END_NAMESPACE',`dnl
  295. _PUSH()
  296. popdef(`__NAMESPACE__')
  297. popdef(`__NAMESPACE_BEGIN__')
  298. popdef(`__NAMESPACE_END__')
  299. _POP()
  300. ')dnl enddef _END_NAMESPACE
  301.  
  302. define(`_INCLUDE_FLAG',`__FLAG_$1_INCLUDE_`'_UPPER(m4_translit(`$2',`/.-',`___'))__')dnl
  303.  
  304. define(`_PH_INCLUDE',`dnl
  305. m4_ifdef(_INCLUDE_FLAG(PH,`$*'),,`dnl else
  306. define(_INCLUDE_FLAG(PH,`$*'))dnl
  307. _PUSH(SECTION_PHEADER)
  308. #include <$*>
  309. _POP()
  310. ')dnl endif
  311. ')dnl
  312.  
  313. define(`_CC_INCLUDE',`dnl
  314. m4_ifdef(_INCLUDE_FLAG(CC,`$*'),,`dnl else
  315. define(_INCLUDE_FLAG(CC,`$*'))dnl
  316. _PUSH(SECTION_CC_INCLUDES)
  317. #include <$*>
  318. _POP()
  319. ')dnl endif
  320. ')dnl
  321.  
  322. define(`_PINCLUDE', defn(`_PH_INCLUDE'))
  323.  
  324. # Put these, for instance, around gtkmmproc macros (_WRAP_SIGNAL) 
  325. # to make the #ifndef appear around the generated code in both the .h 
  326. # and .cc files.
  327. # e.g.  _GTKMMPROC_H_AND_CC(#ifndef _SUN_CC_)
  328. # e.g.  _GTKMMPROC_H_AND_CC(#endif //_SUN_CC_)
  329. # _GTKMMPROC_H_AND_CC(code)
  330. define(`_GTKMMPROC_H_AND_CC',`dnl
  331. $1
  332. _PUSH(SECTION_CC)
  333. $1
  334.  
  335. _POP()
  336. ')dnl
  337.  
  338. # Same thing as _GTKMMPROC_H_AND_CC but for signals (_WRAP_SIGNAL)
  339. define(`_GTKMMPROC_SIGNAL_H_AND_CC',`dnl
  340. $1
  341. _PUSH(SECTION_ANONYMOUS_NAMESPACE)
  342. $1
  343. _POP()
  344.  
  345. $1
  346. _PUSH(SECTION_H_DEFAULT_SIGNAL_HANDLERS)
  347. $1
  348. _POP()
  349.  
  350. $1
  351. _PUSH(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS)
  352. $1
  353. _POP()
  354.  
  355. $1
  356. _PUSH(SECTION_CC_DEFAULT_SIGNAL_HANDLERS)
  357. $1
  358. _POP()
  359.  
  360. $1
  361. _PUSH(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS)
  362. $1
  363. _POP()
  364.  
  365. $1
  366. _PUSH(SECTION_CC_SIGNALPROXIES)
  367. $1
  368. _POP()
  369. ')dnl
  370.  
  371. m4_include(class_shared.m4)
  372. m4_include(class_generic.m4)
  373. m4_include(class_gobject.m4)
  374. m4_include(class_gtkobject.m4)
  375. m4_include(class_boxedtype.m4)
  376. m4_include(class_boxedtype_static.m4)
  377. m4_include(class_interface.m4)
  378. m4_include(class_opaque_copyable.m4)
  379. m4_include(class_opaque_refcounted.m4)
  380. m4_include(gerror.m4)
  381. m4_include(signal.m4)
  382. m4_include(vfunc.m4)
  383. m4_include(method.m4)
  384. m4_include(member.m4)
  385. m4_include(compare.m4)
  386. m4_include(ctor.m4)
  387. m4_include(property.m4)
  388. m4_include(enum.m4)
  389.  
  390. _SECTION(SECTION_HEADER1)
  391.  
  392.